import java.util.Objects;

class Person{

private String name;
private int age;
public Person(String name,int age){
    this.name=name;
    this.age=age;
}
public int hashCode(){
    return Objects.hash(this.name,this.age);
}
public boolean equals(Object obj){
    if(obj==null){
        return false;
    }

    if(this==obj){//此处是基本比较
        return true;
    }
    //

    //判断是否传了一个错误的给obj，我们就没办法处理。
    if(!(obj instanceof Person)){
        return false;
    }

    //自定义对象的具体比较方法，
    Person person=(Person) obj;
    return this.name.equals(person.name)&&this.age== person.age;
}
}
class Student{

}
public class Test {
    public static void main(String[] args) {
        Person person=new Person("董李阳",19);
        Person person1=new Person("团子",19);
        Person person2=new Person("董李阳",19);
        Person person3=new Person("团子",19);
        System.out.println(person1.hashCode());
        System.out.println(person3.hashCode());
        System.out.println(person.hashCode());
        System.out.println(person2.hashCode());



    }
    public static void main2(String[] args) {
        //function(new Person());
        //function(new Student());
        Person person=new Person("董李阳",19);
        Person person1=new Person("团子",19);

        int a=10;
        int b=10;
        System.out.println(a==b);
        System.out.println(person==person1);
        System.out.println(person1.equals(person));

    }

    //这个是人家Object类中的toString方法
    //需要重写
    //

    //对象比较方法：equals方法
    //在Java中，==进行比较时候：
    //a.如果==左右两侧是基本类型变量。比较的是变量中值是否相同
    //b.如果左右两边是引用数据类型变量，比较的是引用变量的地址是否相同
    //c.如果要比较对象中的内容，必须要重写toString中的equals方法，因为equals方法默认的也是比较地址
    //



    //Object类里面的equals方法
    public boolean equals(Object obj){
        return(this==obj);
    }
    public String toString(){
        return getClass().getName()+"@"+Integer.toHexString(hashCode());
    }
    //Hex--十六进制--施加魔法的人
    //后面是用hashCode（）方法去算一个具体的对象位置，以十六进制输出
    //hashCode是一个本地方法，底层是使用C|C++
    //
    public native int hashCode();
    public static void function(Object obj){
        System.out.println(obj);
    }
}
